package ar.com.gep.soccer.facade;

import java.util.List;

import ar.com.cdt.framework.business.bo.BusinessObject;
import ar.com.gep.soccer.exception.EditionBusinessException;
import ar.com.gep.soccer.exception.LeagueBusinessException;
import ar.com.gep.soccer.exception.MatchBusinessException;
import ar.com.gep.soccer.exception.RoundBusinessException;
import ar.com.gep.soccer.exception.SeasonBusinessException;
import ar.com.gep.soccer.exception.TeamBusinessException;
import ar.com.gep.soccer.services.dto.EditionDTO;
import ar.com.gep.soccer.services.dto.GameDTO;
import ar.com.gep.soccer.services.dto.LeagueDTO;
import ar.com.gep.soccer.services.dto.RoundDTO;
import ar.com.gep.soccer.services.dto.SeasonDTO;
import ar.com.gep.soccer.services.dto.TeamDTO;
import ar.com.gep.soccer.services.dto.WeekInfoSeasonDTO;

public interface TournamentFacade extends BusinessObject {

	GameDTO getMatch(final Long id) throws MatchBusinessException;

	GameDTO saveMatch(final GameDTO dto) throws TeamBusinessException;

	GameDTO updateMatch(final GameDTO dto) throws TeamBusinessException;

	RoundDTO saveRound(final RoundDTO rounds) throws RoundBusinessException;

	RoundDTO getRound(final Long id) throws RoundBusinessException;

	EditionDTO getEdition(final Long id) throws EditionBusinessException;

	EditionDTO saveEdition(final EditionDTO dto) throws EditionBusinessException;

	LeagueDTO getLeague(final Long id) throws LeagueBusinessException;

	LeagueDTO saveLeague(final LeagueDTO dto) throws LeagueBusinessException;

	EditionDTO createEditionLeague(final Long id, final List<TeamDTO> teamsDTO, final Boolean complete) throws LeagueBusinessException;

	LeagueDTO updateLeague(final LeagueDTO leagueDTO) throws LeagueBusinessException;

	Boolean canPlayEdition(final Long id) throws EditionBusinessException;

	RoundDTO playEditionWeek(final Long id) throws EditionBusinessException;

	SeasonDTO getSeasonById(final Long id) throws SeasonBusinessException;

	RoundDTO playLeagueWeek(final Long id) throws LeagueBusinessException;

	int getTotalRoundLastEdition(final Long id) throws LeagueBusinessException;

	SeasonDTO saveSeason(final SeasonDTO seasonDTO) throws SeasonBusinessException;

	SeasonDTO updateSeason(final SeasonDTO seasonDTO) throws SeasonBusinessException;

	SeasonDTO playSeasonWeek(final Long id) throws SeasonBusinessException;

	WeekInfoSeasonDTO getWeekInfo(final Long id, final Integer week) throws SeasonBusinessException;
	
}
